<% municipio_field = "#{tipo_contato}_municipio" %>
<ul><li>
  <%= f.label :logradouro, "Logradouro" %>
  <%= f.text_field :logradouro, :class => :large %>
</li><li>
  <%= f.label :numero, "Número" %>
  <%= f.text_field :numero %>
</li><li>
  <%= f.label :bairro, "Bairro/Distrito" %>
  <%= f.text_field :bairro %>
</li><li>
  <%= f.hidden_field :municipio_id, :id => "#{municipio_field}_id" %>
  <%= label_tag municipio_field, "Município" %>
  <% contato = f.object %>
  <%= text_field_tag municipio_field, contato.municipio ? "#{contato.municipio.nome} - #{contato.municipio.estado.uf}" : "", :size => 40 %>
</li><li>
  <%= f.label :cep, "CEP" %>
  <%= f.text_field :cep, :alt => :cep %>
</li><li>
  <%= f.label :telefones, "Telefones" %>
  <%= f.text_field :telefones %>
</li><li>
  <%= f.label :fax, "Fax" %>
  <%= f.text_field :fax %>
</li><li>
  <%= f.label :email, "E-mail" %>
  <%= f.text_field :email %>
</li></ul>

<script type="text/javascript" charset="utf-8">
jQuery(function() {
  var municipio = jQuery('#<%=municipio_field%>');
  var municipio_id = jQuery('#<%=municipio_field%>_id');

  municipio.autocomplete('<%=municipios_path(:format => :json)%>', {
    minChars: 3,
    max: 20,
    parse: function(data) {
      return jQuery.map(eval(data), function(row) {
        return {
          data: row.municipio,
          value: row.municipio.nome + " - " + row.municipio.uf,
          result: row.municipio.nome + " - " + row.municipio.uf
        }
      });
    },
    formatItem: function(item) { return item.nome + " - " + item.uf; }
  });
  municipio.result(function(event, data) {
    municipio_id.val(data.id);
  });
});
</script>
